package org.dromara.common.core.validate.dicts

import jakarta.validation.ConstraintValidator
import jakarta.validation.ConstraintValidatorContext
import org.dromara.common.core.service.DictService
import org.dromara.common.core.utils.SpringUtils
import org.dromara.common.core.utils.StringUtils

/**
 * 自定义字典值校验器
 *
 * @author LikeYouDo
 */

open class DictPatternValidator : ConstraintValidator<DictPattern, String> {
    /**
     * 字典类型
     */
    private lateinit var dictType: String

    /**
     * 分隔符
     */
    private var separator: String = ","

    /**
     * 初始化校验器，提取注解上的字典类型
     *
     * @param annotation 注解实例
     */
    override fun initialize(annotation: DictPattern) {
        this.dictType = annotation.dictType
        if (StringUtils.isNotBlank(annotation.separator)) {
            this.separator = annotation.separator
        }
    }

    /**
     * 校验字段值是否为指定字典类型中的合法值
     *
     * @param value   被校验的字段值
     * @param context 校验上下文（可用于构建错误信息）
     * @return true 表示校验通过（合法字典值），false 表示不通过
     */
    override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {
        if (StringUtils.isBlank(dictType) || StringUtils.isBlank(value)) {
            return false
        }
        val dictLabel: String =
            SpringUtils.getBean(DictService::class.java).getDictLabel(dictType, value, separator)
        return StringUtils.isNotBlank(dictLabel)
    }


}
